//== SAGITTARIUS ============================================================================

//== FILEDOC =========================================================================

/** @file codegen.h
  * @brief codegen
  */

//== BEGINNING OF CODE ===============================================================

#ifndef __SAGUTTARUIS__LLVM_SUPPORT__H_
#define __SAGUTTARUIS__LLVM_SUPPORT__H_

//== INCLUDES ========================================================================

#include "sagittarius/core/SagittariusCore.h"
#include "sagittarius/parser/pAST.h"
#include "sagittarius/symtab/symtab.h"
#include "sagittarius/compiler/compiler.h"
#include "sagittarius/builtins/builtins.h"
#include "sagittarius/builtins/builtinfun.h"
#include "sagittarius/backend/llvm/support.h"

#ifdef __cplusplus

//LLVM
#include "llvm/Support/DataTypes.h"
#include "llvm/DerivedTypes.h"
#include "llvm/IRBuilder.h"
#include "llvm/LLVMContext.h"
#include "llvm/Module.h"
#include "llvm/Analysis/Verifier.h"

#include "llvm/ExecutionEngine/ExecutionEngine.h"
#include "llvm/ExecutionEngine/JIT.h"
#include "llvm/ExecutionEngine/GenericValue.h"
#include "llvm/Support/TargetSelect.h"
#include "llvm/Support/raw_os_ostream.h"


namespace Sagittarius {
    void dump_arg_types(const std::vector<llvm::Value*>& args);
    
    int check_farg_types(llvm::Function* f, const std::vector<llvm::Value*>& args);
}
#endif

#endif
